# 构建模拟事务处理装饰器

# 一.函数1: 删除数据功能
# 函数2: 增加数据功能
#
# 二.需要新增功能检查数据是否存在
#
# 三.请使用闭包和装饰器给函数1和2添加功能
# 构建装饰器
# 封装登录检查功能
def shop():
    print('跳转登录界面')
    print('输入用户名和密码')
    print('登陆成功')

# 删除数据功能
def deleted_data():
    # 权限检查
    shop()
    print('删除成功')

# 增加数据功能
def add_data():
    # 权限检查
    shop()
    print('添加成功')

# 解决办法1:使用闭包的方式
# 旧功能+ 扩展(装饰)新功能
# 给第三方函数 增加检查功能的闭包
def add_shop(func):
    '''
    永远不需要修改func的功能,只需要给他做增强
    :param func: 外部传入的第三方函数
    :return:
    '''
    def f1():
        print('增加数据检查功能')
        func()
    return f1

# 函数名后面跟括号相当于执行!
# 使用装饰器
@add_shop
def deleted_data():
    print('删除密码')
@add_shop
def add_data():
    print('添加账号')
# 执行
deleted_data()
add_data()
